package Interfaz;

import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Button;

import DTO.DTOTablaDePosiciones;
import Excepcion.TablaNoPermitidaException;
import Negocios.ControlCompetencia;
import Negocios.ControlFixture;


/**
 * CU021 - Mostrar tabla de posiciones
 * @author 
 */
public class CU021 {

	protected Shell shlTablaDePosiciones;
	private Table table;
	
	private CU020 pantallaAnterior;
	
	private int idCompetencia;
	
	public CU021(int idCompetencia, CU020 pantallaAnterior) {
		this.idCompetencia = idCompetencia;
		this.pantallaAnterior = pantallaAnterior;
	}

	/**
	 * Open the window.
	 * @throws TablaNoPermitidaException 
	 */

	public void open() throws TablaNoPermitidaException {
		Display display = Display.getDefault();
		createContents();
		
		// Centrar ventana
		Monitor primary = display.getPrimaryMonitor();
		Rectangle bounds = primary.getBounds();
		Rectangle rect = shlTablaDePosiciones.getBounds();	    
		int x = bounds.x + (bounds.width - rect.width) / 2;
		int y = bounds.y + (bounds.height - rect.height) / 2;	    
		shlTablaDePosiciones.setLocation(x, y);
		
		Label lblCompetencia = new Label(shlTablaDePosiciones, SWT.NONE);
		lblCompetencia.setBounds(10, 15, 74, 15);
		lblCompetencia.setText("Competencia:");
		
		Label lblNombreCompetencia = new Label(shlTablaDePosiciones, SWT.NONE);
		lblNombreCompetencia.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
		lblNombreCompetencia.setBounds(90, 15, 150, 15);
		
		table = new Table(shlTablaDePosiciones, SWT.BORDER | SWT.FULL_SELECTION);
		table.setBounds(10, 45, 774, 444);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		
		TableColumn tblclmnNombreDelEquipo = new TableColumn(table, SWT.NONE);
		tblclmnNombreDelEquipo.setWidth(130);
		tblclmnNombreDelEquipo.setText("Nombre del Equipo");
		
		TableColumn tblclmnPuntos = new TableColumn(table, SWT.NONE);
		tblclmnPuntos.setWidth(70);
		tblclmnPuntos.setText("Puntos");
		
		TableColumn tblclmnPartidosGanados = new TableColumn(table, SWT.NONE);
		tblclmnPartidosGanados.setWidth(110);
		tblclmnPartidosGanados.setText("Partidos Ganados");
		
		TableColumn tblclmnPartidosEmpatados = new TableColumn(table, SWT.NONE);
		tblclmnPartidosEmpatados.setWidth(120);
		tblclmnPartidosEmpatados.setText("Partidos Empatados");
		
		TableColumn tblclmnPartidosPerdidos = new TableColumn(table, SWT.NONE);
		tblclmnPartidosPerdidos.setWidth(110);
		tblclmnPartidosPerdidos.setText("Partidos Perdidos");
		
		TableColumn tblclmnTantosAFavor = new TableColumn(table, SWT.NONE);
		tblclmnTantosAFavor.setWidth(100);
		tblclmnTantosAFavor.setText("Tantos a Favor");
		
		TableColumn tblclmnTantosEnContra = new TableColumn(table, SWT.NONE);
		tblclmnTantosEnContra.setWidth(110);
		tblclmnTantosEnContra.setText("Tantos en Contra");
		
		TableColumn tblclmnDiferencia = new TableColumn(table, SWT.NONE);
		tblclmnDiferencia.setWidth(70);
		tblclmnDiferencia.setText("Diferencia");
		
		ControlFixture controlFixture = new ControlFixture();
		ControlCompetencia controlCompetencia = new ControlCompetencia();
		
		try {
			ArrayList<DTOTablaDePosiciones> tablaPosiciones = controlFixture.mostrarTablaDePosiciones(idCompetencia);
			String tantosAFavor, tantosEnContra, diferencia;
			
			boolean esPuntuacion = controlCompetencia.esFormaPuntuacion(idCompetencia);
			
			lblNombreCompetencia.setText(tablaPosiciones.get(0).getNombreCompetencia());
			
			// Ordeno tabla
			for (int i = 1; i < tablaPosiciones.size(); i++) {
				for (int j = 0; j < i; j++) {
					if (tablaPosiciones.get(i).getPuntos() > tablaPosiciones.get(j).getPuntos()) {
						DTOTablaDePosiciones aux = tablaPosiciones.get(j);
						tablaPosiciones.set(j, tablaPosiciones.get(i));
						tablaPosiciones.set(i, aux);
					}
					else if (tablaPosiciones.get(j).getPuntos() == tablaPosiciones.get(i).getPuntos()
							&& esPuntuacion) {
						// Ordeno por diferencia y tantos a favor
						if (tablaPosiciones.get(i).getDiferencia() > tablaPosiciones.get(j).getDiferencia()) {
							DTOTablaDePosiciones aux = tablaPosiciones.get(j);
							tablaPosiciones.set(j, tablaPosiciones.get(i));
							tablaPosiciones.set(i, aux);
						}
						else if (tablaPosiciones.get(i).getDiferencia() == tablaPosiciones.get(j).getDiferencia()
								&& tablaPosiciones.get(i).getTantosAFavor() > tablaPosiciones.get(j).getTantosAFavor()) {
							DTOTablaDePosiciones aux = tablaPosiciones.get(j);
							tablaPosiciones.set(j, tablaPosiciones.get(i));
							tablaPosiciones.set(i, aux);
						}
					}
				}
			}
			
			for (DTOTablaDePosiciones renglon : tablaPosiciones) {
				tantosAFavor = (esPuntuacion ? new Integer(renglon.getTantosAFavor()).toString() : "");
				tantosEnContra = (esPuntuacion ? new Integer(renglon.getTantosEnContra()).toString() : "");
				diferencia = (esPuntuacion ? new Integer(renglon.getDiferencia()).toString() : "");
				
				TableItem tableItem = new TableItem(table, SWT.NONE);
				tableItem.setText(new String[] {renglon.getEquipo(), new Integer(renglon.getPuntos()).toString(),
						new Integer(renglon.getPartidosGanados()).toString(),
						new Integer(renglon.getPartidosEmpatados()).toString(),
						new Integer(renglon.getPartidosPerdidos()).toString(),
						tantosAFavor, tantosEnContra, diferencia});
			}
		}
		catch (TablaNoPermitidaException ex) {
			throw ex;
		}

		Button btnSalir = new Button(shlTablaDePosiciones, SWT.NONE);
		btnSalir.setText("Salir");
		btnSalir.setBounds(665, 519, 108, 32);
		btnSalir.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shlTablaDePosiciones.close();
			}
		});
		
		Button btnExportar = new Button(shlTablaDePosiciones, SWT.NONE);
		btnExportar.setText("Exportar");
		btnExportar.setBounds(395, 519, 108, 32);
		
		Button btnImprimir = new Button(shlTablaDePosiciones, SWT.NONE);
		btnImprimir.setText("Imprimir");
		btnImprimir.setBounds(530, 519, 108, 32);
		
		shlTablaDePosiciones.open();
		shlTablaDePosiciones.layout();
		while (!shlTablaDePosiciones.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlTablaDePosiciones = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
		shlTablaDePosiciones.setSize(800, 600);
		shlTablaDePosiciones.setText("Tabla de posiciones");
		shlTablaDePosiciones.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				pantallaAnterior.shlCompetencia.setVisible(true);
				pantallaAnterior.shlCompetencia.forceFocus();
			}
		});
	}
}
